<template>
  <div>
    <!-- 1.顶部栏NavBar -->
    <van-nav-bar title="搜索中心" left-arrow @click-left="$router.back()" />
    <!-- 2.搜索框 -->
    <van-search
      v-model="value"
      show-action
      placeholder="请输入搜索关键词"
      @search="onSearch"
      @input="onInput"
    >
      <template #action>
        <div @click="onSearch">搜索</div>
      </template>
    </van-search>
    <!-- 3.关键词搜索结果展示区域 -->
    <!-- 注意：调用计算属性showLight！ -->
    <van-cell
      v-for="(item, index) in showLight"
      :key="index"
      icon="search"
      @click="
        $router.push({
          path: '/searchResult',
          query: { keyword: suggestion[index] }
        })
      "
    >
      <!-- item属性表示每一行的搜索出来的结果，计算属性不能操作属性。所以利用插槽 -->
      <template #title>
        <div v-html="item"></div>
      </template>
    </van-cell>
    <!-- 4.历史记录 -->
    <van-cell title="历史记录" />
    <van-cell title="单元格">
      <!-- 使用 right-icon 插槽来自定义右侧图标 -->
      <template #right-icon>
        <van-icon name="close" class="search-icon" />
      </template>
    </van-cell>
    <van-cell title="单元格">
      <!-- 使用 right-icon 插槽来自定义右侧图标 -->
      <template #right-icon>
        <van-icon name="close" class="search-icon" />
      </template>
    </van-cell>
  </div>
</template>

<script>
import { getSuggestion } from './home.js'
export default {
  name: 'search',
  data () {
    return {
      value: '',
      suggestion: [],
      timeID: null
    }
  },
  methods: {
    // 1.点击enter/搜索按钮触发
    onSearch () {
      this.$router.push({
        path: '/searchResult',
        query: { keyword: this.value }
      })
    },
    // 2.监听搜索框输入变化
    onInput () {
      // 防抖：
      clearTimeout(this.timeID)

      this.timeID = setTimeout(async () => {
        if (this.value == '') {
          this.suggestion = []
          // 如果输入框为空，则返回。不再请求数据
          return
        }
        let res = await getSuggestion({ q: this.value })
        console.log(res)
        this.suggestion = res.data.data.options
      }, 500)
    }
  },
  computed: {
    // 3.让搜索关键字高亮
    showLight () {
      // 3.1 创建正则：(g:代表全局匹配；i：不区分大小写)
      let reg = new RegExp(this.value, 'gi')
      return this.suggestion.map(value => {
        return value.replace(reg, match => {
          return `<span style="color:red">${match}</span>`
        })
      })
    }
  }
}
</script>

<style></style>
